import { defineConfig, PluginOption } from 'vite'
import vue from '@vitejs/plugin-vue'
import { resolve as nodeResolve } from "path";
import { SERVER_HOST, SERVER_PROXY_API, SERVER_PORT, APP_NAME } from './src/globals'

// 版本工具
// @ts-ignore
import versionFile from "purple-version-vite";

import qiankun from 'vite-plugin-qiankun';
// console.log("🚀 ~ qiankun:", qiankun)

// 分析打包大小
import { visualizer } from "rollup-plugin-visualizer";

// https://vitejs.dev/config/
export default defineConfig({

  // logLevel: 'error', // 只显示错误信息

  // base: "./", // 设置打包路径
  base: process.env.NODE_ENV === 'production' ? `/${APP_NAME}/` : '/',

  build: {
    target: 'es2015',
    outDir: APP_NAME,
    assetsDir: 'assets',
    cssCodeSplit: true,
    commonjsOptions: {
      ignoreTryCatch: false,
    },
    // 自定义输出文件夹规则
    rollupOptions: {
      output: {
        entryFileNames: 'js/[name]-[hash].js', // 将 JS 文件放在 infinity/js 文件夹下
        chunkFileNames: 'js/[name]-[hash].js', // 将拆分的 chunk 文件放在 infinity/js 文件夹下
        assetFileNames: 'assets/[name]-[hash][extname]', // 将图片文件放在 infinity/assets 文件夹下
      },
    },
  },

  server: {
    host: SERVER_HOST,
    port: SERVER_PORT, // 设置服务启动端口号
    open: true, // 设置服务启动时是否自动打开浏览器
    cors: true, // 允许跨域

    headers: {
      'Access-Control-Allow-Origin': '*', // 主应用获取子应用时跨域响应头
    },

    // 设置代理，根据我们项目实际情况配置
    proxy: {
      "/api": {
        // target: "http://template.ziyiplus.com",
        target: SERVER_PROXY_API,
        changeOrigin: true,
        secure: false,
        // rewrite: (path) => path.replace("/api/", "/api/"),
      },
    },
  },

  plugins: [
    vue(),
    qiankun(APP_NAME, {
      useDevMode: true
    }),
    versionFile() as PluginOption,
    visualizer() as PluginOption,
  ],

  // 配置全局 scss 变量文件
  css: {
    preprocessorOptions: {
      scss: {
        additionalData: `@import "@/assets/styles/global-scss/index.scss";`,
        charset: false,
      },
    },
  },

  // 配置路径别称
  resolve: {
    alias: {
      "@": nodeResolve(__dirname, "src"), // 设置 `@` 指向 `src` 目录
      "@mock": nodeResolve(__dirname, "./src/utils/mock"),
    },
  },
})
